1.3 ¿Qué es un Tipo de Dato Abstracto?

Un Tipo de Dato Abstracto, TDA, es un modelo de una parte de la realidad. Pero no es cualquier modelo, tiene que cumplir ciertas condiciones para que sea considerado como un TDA. Un Tipo de Dato Abstracto debe definir dos partes: el invariante y un conjunto de operaciones. Por ejemplo, el TDA Nave Espacial (ver figura [*], que también es un modelo) tiene el invariante: cualquier vehículo que pueda navegar en el espacio, que tiene una bodega de carga y un área de pasajeros. Hay que notar que no todas las partes de una nave espacial se mencionan. Primero porque el modelo perdería generalidad y segundo, por que pueden no ser relevantes (para un ejemplo didactico son suficientes). Las operaciones del TDA Nave Espacial podrían ser: cargar combustible, abrir escotilla, prender motores, mover timón en una dirección, etc.

Figure: EL TDA Nave Espacial
\resizebox*{0.3\textwidth}{!}{\includegraphics{nave_espacial.eps}}

El invariante es una proposición que expresa el conjunto de valores válidos del TDA. El invariante permite saber qué elementos pertenecen al TDA y qué elementos no. En nuestro ejemplo, un automóvil no pertenece a TDA Nave Espacial, puesto que no puede navegar por el espacio; tampoco un barco, pues este navega por el mar; tampoco un satélite o una sonda espacial pertenecerían pues estos no tienen espacio para pasajeros. Pero el Transbordador Espacial (o lanzadera espacial) si pertenecería al TDA.

Un invariante también expresa la estructura abstracta del TDA. Por ejemplo en el TDA Nave Espacial se dice que tiene una bodega de carga y un espacio para pasajeros. ¿Por qué se dice que la estructura es abstracta?. Porque se trata de que el TDA tenga un nivel alto de generalidad, una de las formas para que esto se cumpla es que el TDA debe ser lo más independiente posible de su implementación, o sea, de la forma en como se representa en un lenguaje de programación. Por ello en el ejemplo, se habla de bodega de carga y no de un arreglo cuyos elementos pueden ser estructuras que tienen el código del artículo, su descripción, etc.

La otra forma de que un TDA tenga un nivel alto de generalidad consite en utilizar los conceptos del TDA en el lenguaje que se utiliza comúnmente en la parte de la realidad que se trata de modelar, por eso se habla de pasajeros y no de cadenas de caracteres.

Una operación es algo que se puede hacer al TDA. En el ejemplo, la operación cargar combustible es algo que se puede hacer al TDA Nave Espacial. No es extraño que una operación involucre más de un TDA, por ejemplo, abrir escotilla de la nave, incluye el TDA Nave Espacial y el TDA Escotilla.

El conjunto de las operaciones define el comportamiento del TDA, esto es, define lo que se puede hacer o no con el TDA. Al TDA Nave Espacial se le puede aplicar la operación prender motores, pero no se le puede aplicar la operación comer, pues no pertenece al TDA Animal.

Un TDA puede estar compuesto por otros TDAs. En el ejemplo bodega de carga y área de pasajeros, de hecho ésta es la forma como se diseñan los TADs; se parte de un TDA general y se va desglosando en sus partes que son a su vez TDAs.

Expresándolo en términos formales, un TDA se define como el par \( \left( invariante,Operaciones\right) \), donde \( invariante \) es un proposición (que tiene un valor verdedero o falso) y \( Operaciones \) es el conjunto de las operaciones del TDA. Ya que estamos tan formales podemos definir el TDA Nave Espacial asi:

Invariante:

\begin{displaymath}
Nave=(bodega,areapasajeros)\wedge bodega\in Bodega\wedge areapasajeros\in Areapasajeros\end{displaymath}

Operaciones:

\begin{eqnarray*}
cargarcombustible: & Nave\times Combustible & \rightarrow Nave...
...row Nave\\
mover: & Nave\times Tim\acute{o}n & \rightarrow Nave
\end{eqnarray*}



Como se puede observar se acostumbra a poner los nombres de TDA con la inicial mayúscula. En la definición el invariante puede parecer un poco redundante como en el caso de \( bodega\in Bodega \) y \( areapasajeros\in Areapasajeros \). Lo que pasa aqui es que se está haciendo referencia a elementos, \( bodega \) y \( areapasajeros \), que pertenecen a otros TDAs, \( Bodega \) y \( Areapasajeros \) (que se diferencian por la inicial mayúscula). Estos TDAs deben definirse también para que el TDA Nave esté completo. Pero este es un trabajo que se deja al lector.


next up previous contents
Next: 1.4 TDAs e Instancias Up: 1. El Tipo de Previous: 1.2 Modelo   Contents
Free Web Hosting